home *** CD-ROM | disk | FTP | other *** search
/ Qu.......ke Neue Level / KroGer Software GmbH - Qu_ke.iso / UTILITY / PRG8.ZIP / G_COLCNV.C < prev    next >
C/C++ Source or Header  |  1996-03-02  |  2KB  |  60 lines

  1. /*
  2.  * Copyright (C) 1996 by Raphael Quinet.  All rights reserved.
  3.  *
  4.  * Permission to use, copy, modify, and distribute this software and
  5.  * its documentation for any purpose and without fee is hereby
  6.  * granted, provided that the above copyright notice appear in all
  7.  * copies and that both that copyright notice and this permission
  8.  * notice appear in supporting documentation.  If more than a few
  9.  * lines of this code are used in a program which displays a copyright
  10.  * notice or credit notice, the following acknowledgment must also be
  11.  * displayed on the same screen: "This product includes software
  12.  * developed by Raphael Quinet for use in the Quake Editing Utilities
  13.  * project."  THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR
  14.  * IMPLIED WARRANTY.
  15.  *
  16.  * More information about the QEU project can be found on the WWW:
  17.  * "http://www.montefiore.ulg.ac.be/~quinet/games/editing.html" or by
  18.  * mail: Raphael Quinet, 9 rue des Martyrs, B-4550 Nandrin, Belgium.
  19.  */
  20.  
  21. /*
  22.  * G_COLCNV.C - Color conversion routines (24 bit <-> 256 colors <-> 16 colors)
  23.  */
  24.  
  25. #include "qeu.h"
  26. #include "q_misc.h"
  27. #include "g_colcnv.h"
  28.  
  29. /*
  30.  * Return the palette index of the color which is closest to the given
  31.  * color.
  32.  */
  33. UInt8 GetPaletteMatch(struct RGB color, struct RGB *palette256)
  34. {
  35.   int    i;
  36.   int    besti;
  37.   Int32  dR, dG, dB;
  38.   UInt32 dist;
  39.   UInt32 bestdist;
  40.  
  41.   /* naive version which uses RGB distances - to be improved later! */
  42.   besti = 0;
  43.   bestdist = 3L * 255L * 255L;
  44.   for (i = 1; i < 256; i++)
  45.     {
  46.       dR = color.R - palette256[i].R;
  47.       dG = color.G - palette256[i].G;
  48.       dB = color.B - palette256[i].B;
  49.       dist = dR * dR + dG * dG + dB * dB;
  50.       if (dist < bestdist)
  51.     {
  52.       bestdist = dist;
  53.       besti = i;
  54.     }
  55.     }
  56.   return (UInt8)besti;
  57. }
  58.  
  59. /* end of file */
  60.